/**
 * Created by WheelChen on 2017/5/18.
 */
import com.jogamp.opengl.*;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.glu.GLU;

import javax.swing.JFrame;

/**
 * 画线
 */
public class Line implements GLEventListener{
    private float rtri;  //for angle of rotation

    private GLU glu = new GLU();
    @Override
    public void display(GLAutoDrawable drawable) {
        //得到OpenGL的主接口
        final GL2 gl = drawable.getGL().getGL2();

        //清除屏幕和深度缓存
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

        //重置当前的模型观察矩阵
        gl.glLoadIdentity();


//        gl.glRotatef( rtri, 0.0f, 1.0f, 0.0f );//triangle rotation
        gl.glBegin (GL2.GL_LINES);//static field
        gl.glVertex3f(0.50f,-0.50f,0);
        gl.glVertex3f(-0.50f,0.50f,0);
        gl.glEnd();

//        gl.glBegin (GL2.GL_LINES);
//
//        //1
//        gl.glBegin (GL2.GL_LINES);
//        gl.glVertex3f(-0.30f, -0.50f, 0);
//        gl.glVertex3f(0f, 0.3f, 0);
//        gl.glEnd();
//        //2
//        gl.glBegin (GL2.GL_LINES);
//        gl.glVertex3f(0f, 0.3f, 0);
//        gl.glVertex3f(0.3f, -0.50f, 0);
//        gl.glEnd();
//        //3
//        gl.glBegin (GL2.GL_LINES);
//        gl.glVertex3f(0.30f, -0.50f, 0);
//        gl.glVertex3f(-0.50f, 0f, 0);
//        gl.glEnd();
//        //4
//        gl.glBegin (GL2.GL_LINES);
//        gl.glVertex3f(-0.50f, 0f, 0);
//        gl.glVertex3f(0.50f, 0f, 0);
//        gl.glEnd();
//        //5
//        gl.glBegin (GL2.GL_LINES);
//        gl.glVertex3f(0.50f, 0f, 0);
//        gl.glVertex3f(-0.30f, -0.50f, 0);
//        gl.glEnd();
//
//        gl.glFlush();
//
//        rtri += 1f;

    }
    @Override
    public void dispose(GLAutoDrawable drawable) {
        //method body
    }

    /**
     * 初始化
     * @param drawable
     */
    @Override
    public void init(GLAutoDrawable drawable) {
        //获取gl对象。
        GL2 gl = drawable.getGL().getGL2();
        //启动阴影平滑。阴影平滑通过多边形精细的混合色彩，并对外部光进行平滑。
        gl.glShadeModel(GL2.GL_SMOOTH);
        /**
         * 设置清除屏幕时所用的颜色。如果您对色彩的工作原理不清楚的话，
         * 我快速解释一下。色彩值的范围从0.0f到1.0f。0.0f代表最黑的情况，
         * 1.0f就是最亮的情况。glClearColor 后的第一个参数是
         * Red Intensity(红色分量),第二个是绿色，第三个是蓝色。
         * 最大值也是1.0f，代表特定颜色分量的最亮情况。
         * 最后一个参数是Alpha值。当它用来清除屏幕的时候，
         * 我们不用关心第四个数字。现在让它为0.0f。
         *通过混合三种原色(红、绿、蓝)，您可以得到不同的色彩。
         */
        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);    // Black Background
    }

    /**
     *当组件的大小改变了的时候就会调用这个方法进行重绘。
     * @param drawable
     * @param x
     * @param y
     * @param width
     * @param height
     */
    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        System.out.println("窗口变动中...");
        final GL2 gl = drawable.getGL().getGL2();
        //防止被零除
        if (height <= 0) // avoid a divide by zero error!
            height = 1;
        final float h = (float) width / (float) height;
        //设置视窗的大小
        gl.glViewport(0, 0, width, height);
        //选择投影矩阵 ,投影矩阵负责为我们的场景增加透视。
        gl.glMatrixMode(GL2.GL_PROJECTION);
        //重置投影矩阵;
        gl.glLoadIdentity();

        //设置视口的大小
        glu.gluPerspective(45.0f, h, 1.0, 20.0);
        //启用模型观察矩阵；模型观察矩阵中存放了我们的物体讯息。
        gl.glMatrixMode(GL2.GL_MODELVIEW);

        gl.glLoadIdentity();
    }

}//end of classimport javax.media.opengl.GL2;
